﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace NJT.IO
{
    public class 配置文件
    {
        /// <summary>
        /// 在当前程序目录下写入名为"配置"的XML文件
        /// </summary>
        public static bool 写入<T>(T 要写入的数据, string 文件名)
        {
            try
            {
                var xml序列 = new XmlSerializer(typeof(T));
                var 数据流 = new FileStream(文件名, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                try
                {
                    xml序列.Serialize(数据流, 要写入的数据);
                    数据流.Close();
                    return true;
                }
                catch (Exception)
                {
                    数据流.Close();
                    return false;
                }
            }
            catch (Exception)
            {
                return false;
            }
        }


        /// <summary>
        /// 读出当前目录下名为"配置"的文件
        /// </summary>
        public static Tuple<bool, T> 读出<T>(string 文件名)
        {
            if (!File.Exists(文件名))
            {
                return new Tuple<bool, T>(false, default(T));
            }
            T 数据;
            var xs = new XmlSerializer(typeof(T));
            Stream stream = new FileStream(文件名, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            try
            {
                数据 = (T)xs.Deserialize(stream);
            }
            catch (Exception)
            {
                return new Tuple<bool, T>(false, default(T));
            }
            finally
            {
                stream.Close();
            }
            return new Tuple<bool, T>(true, 数据);
        }

        public static T 批量读出<T>(T 单例, string 配置文件名)
        {
            var 配置读取 = 读出<T>(配置文件名);
            if (配置读取.Item1)
            {
                单例 = 配置读取.Item2;
            }
            return 单例;
        }
    }
}
